package com.googlecode.wicketcharts.showcase.options;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.googlecode.wicketcharts.highcharts.options.ChartOptions;
import com.googlecode.wicketcharts.highcharts.options.DummyOption;
import com.googlecode.wicketcharts.highcharts.options.Marker;
import com.googlecode.wicketcharts.highcharts.options.Options;
import com.googlecode.wicketcharts.highcharts.options.PlotOptions;
import com.googlecode.wicketcharts.highcharts.options.PlotOptionsChoice;
import com.googlecode.wicketcharts.highcharts.options.SeriesOptions;
import com.googlecode.wicketcharts.highcharts.options.SeriesType;
import com.googlecode.wicketcharts.highcharts.options.SimpleSeriesOptions;
import com.googlecode.wicketcharts.highcharts.options.State;
import com.googlecode.wicketcharts.highcharts.options.StatesChoice;
import com.googlecode.wicketcharts.highcharts.options.Symbol;
import com.googlecode.wicketcharts.highcharts.options.Symbol.PredefinedSymbol;
import com.googlecode.wicketcharts.highcharts.options.Title;
import com.googlecode.wicketcharts.highcharts.options.XAxis;
import com.googlecode.wicketcharts.highcharts.options.YAxis;

/**
 * Demo of the same basic area chart displayed in the Highcharts Demo at <a
 * href=
 * "http://www.highcharts.com/demo/area-basic">http://www.highcharts.com/demo
 * /area-basic</a>.
 * 
 * @author Tom Hombergs (tom.hombergs@gmail.com)
 * 
 */
public class BasicAreaChartOptions extends Options {

	private static final long serialVersionUID = 1L;

	public BasicAreaChartOptions() {

		ChartOptions chartOptions = new ChartOptions();
		chartOptions.setType(SeriesType.AREA);
		setChartOptions(chartOptions);

		setTitle(new Title("US and USSR nuclear stockpiles"));
		setSubTitle(new Title(
				"Source: <a href=\"http://thebulletin.metapress.com/content/c4120650912x74k7/fulltext.pdf\">thebulletin.metapress.com</a>"));

		XAxis xAxis = new XAxis();
		xAxis.setLabels(new DummyOption());
		setxAxis(xAxis);

		YAxis yAxis = new YAxis();
		yAxis.setTitle(new Title("Nuclear weapon states"));
		yAxis.setLabels(new DummyOption());
		setyAxis(yAxis);

		setTooltip(new DummyOption());

		State hoverState = new State();
		hoverState.setEnabled(Boolean.TRUE);

		StatesChoice statesChoice = new StatesChoice();
		statesChoice.setHover(hoverState);

		Marker marker = new Marker();
		marker.setEnabled(Boolean.TRUE);
		marker.setSymbol(new Symbol(PredefinedSymbol.CIRCLE));
		marker.setRadius(2);
		marker.setStates(statesChoice);

		PlotOptions plotOptions = new PlotOptions();
		plotOptions.setPointStart(1940);
		plotOptions.setMarker(marker);

		PlotOptionsChoice plotOptionsChoice = new PlotOptionsChoice();
		plotOptionsChoice.setArea(plotOptions);
		setPlotOptions(plotOptionsChoice);

		SeriesOptions<Number> series1 = new SimpleSeriesOptions();
		series1.setName("USA");
		series1.setData(Arrays.asList(new Number[] { null, null, null, null,
				null, 6, 11, 32, 110, 235, 369, 640, 1005, 1436, 2063, 3057,
				4618, 6444, 9822, 15468, 20434, 24126, 27387, 29459, 31056,
				31982, 32040, 31233, 29224, 27342, 26662, 26956, 27912, 28999,
				28965, 27826, 25579, 25722, 24826, 24605, 24304, 23464, 23708,
				24099, 24357, 24237, 24401, 24344, 23586, 22380, 21004, 17287,
				14747, 13076, 12555, 12144, 11009, 10950, 10871, 10824, 10577,
				10527, 10475, 10421, 10358, 10295, 10104 }));

		SeriesOptions<Number> series2 = new SimpleSeriesOptions();
		series2.setName("USSR/Russia");
		series2.setData(Arrays.asList(new Number[] { null, null, null, null,
				null, null, null, null, null, null, 5, 25, 50, 120, 150, 200,
				426, 660, 869, 1060, 1605, 2471, 3322, 4238, 5221, 6129, 7089,
				8339, 9399, 10538, 11643, 13092, 14478, 15915, 17385, 19055,
				21205, 23044, 25393, 27935, 30062, 32049, 33952, 35804, 37431,
				39197, 45000, 43000, 41000, 39000, 37000, 35000, 33000, 31000,
				29000, 27000, 25000, 24000, 23000, 22000, 21000, 20000, 19000,
				18000, 18000, 17000, 16000 }));

		List<SeriesOptions<Number>> seriesList = new ArrayList<SeriesOptions<Number>>();
		seriesList.add(series1);
		seriesList.add(series2);
		setSeries(seriesList);

	}

}
